package com.cnap.multiclouldmgmt.repository.master;

import com.cnap.multiclouldmgmt.model.scale.db.ScalingPolicyPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <类文件描述>
 *
 * @author xc
 **/
@Mapper
public interface ScalingPolicyMapper {

    /**
     * 建表
     */
    void createTableIfNotExist();

    /**
     * 插入伸缩组信息
     *
     * @param po 伸缩组信息
     * @return 结果
     */
    int insertScalingPolicy(@Param("scalingPolicy") ScalingPolicyPO po);

    /**
     * 根据伸缩组id查询
     *
     * @param groupId 伸缩组id相同
     * @return 结果
     */
    List<ScalingPolicyPO> selectPolicyByGroupId(@Param("groupId") String groupId);

    /**
     * 根据伸缩组id和类型查询
     *
     * @param groupId 伸缩组id
     * @param type    类型
     * @return 结果
     */
    ScalingPolicyPO selectPolicyByGroupIdAndType(@Param("groupId") String groupId, @Param("type") String type);

    /**
     * 根据id删除策略
     *
     * @param policyId 策略id(与伸缩组id相同)
     * @return 结果
     */
    int deletePolicyById(@Param("policyId") String policyId);

    /**
     * 根据伸缩组id和类型删除策略
     *
     * @param groupId 伸缩组id
     * @param type    类型
     * @return 结果
     */
    int deletePolicyByGroupIdAndType(@Param("groupId") String groupId, @Param("type") String type);

    /**
     * 根据伸缩组id删除策略
     *
     * @param groupId 伸缩组id
     * @return 结果
     */
    int deletePolicyByGroupId(@Param("groupId") String groupId);

    /**
     * 根据伸缩组id和类型更新策略
     *
     * @param po 策略信息
     * @return 结果
     */
    int updatePolicy(@Param("scalingPolicy") ScalingPolicyPO po);

    /**
     * 根据svcId和资源类型查询扩容阈值
     *
     * @param svcId    微服务id（label）
     * @param resource cpu/mem
     * @return 结果
     */
    ScalingPolicyPO selectMaxValueByLabelAndResource(@Param("label") String svcId, @Param("resource") String resource);

}
